package cn.itsource.enumdemo3;

/**
 *	枚举：
 *		1. 概念：跟类类似的新结构，就是用了简化类中的常量这种代码的。
 *
 *		2. 作用：简化类中的常量这种代码的。
 *
 *		3. 使用：
 *			声明语法：
				enum 枚举类名字{
					字段
					方法
					构造方法 - 枚举中的构造方法默认都是private修饰，不能够是public，protected修饰
							作用：只能在当前枚举类中使用，就是给当前枚举对象初始化成员变量的
				}
				
		4. 注意事项：
				1. 字段之间用逗号，最后一个字段用分号结束
				2. 可以写中文字段，但是不建议
				3. 枚举类都会隐式继承了Enum类（所有枚举类的基类），不能显示写出来
				4. 构造方法必须是private的
				
		5. 使用场景：一些固定取值的情况用枚举。
				如：vip、段位、星座、日期、生肖。。。
 */	
public enum Gender {
//	public static final Gender MAN = new Gender();//这就是一个String类型的对象，该对象表示男人。我们用其他类型对象表示男人也是一样的
	MAN,//相当于上面这一句代码，也相当于 MAN();
	
//	男,//可以写中文字段，但是不建议
	
//	public static final Gender WOMAN = new Gender();
	WOMAN,//可以这样写 WOMAN()这是在调用当前枚举类的无参构造
	
//	public static final Gender UNKNOWN = new Gender();
	UNKNOWN;
	
	//===================以下是了解=========================
	/**可以写普通成员变量*/
	private String name;//作用就是保存枚举对象的数据的
//	MAN("男人");//调用有参构造，将MAN对象的成员变量name赋值为男人
//	WOMAN("女人");//调用有参构造，将WOMAN对象的成员变量name赋值为女人
//	UNKNOWN("未知");//调用有参构造，将UNKNOWN对象的成员变量name赋值为未知
	
	/**
	 * 构造方法必须是private的
	 */
	private Gender() {
	}
	
	/**
	 * 作用就是给当前枚举对象的成员变量赋值
	 * @param name
	 */
	private Gender(String name){
		this.name = name;
	}
	
	/**
	 * 我们希望打印:
		MAN对象的时候，输出：男人
		WOMAN对象的时候，输出：女人
		UNKNOWN对象的时候，输出：未知
	 */
	@Override
	public String toString() {
		if (this == MAN) {
			return "男人";
		} else if (this == WOMAN) {
			return "女人";
		} else {
			return "未知";
		}
//		return this.name;//这里使用有参构造的toString写法
	}
}
